import _axios, {
  get
} from '../ck/plugin/axios'
import OSS from 'ali-oss'
import fi from 'element-ui/src/locale/lang/fi'

class File {
  static uploadInfo = {
    "newRptno": "CIAS6327002022080102A6327000003",
    "ossObject": {
      "accessId": "LTAI5t5pQaogCfhL9eVhorRm",
      "bucket": "mppcdev",
      "signature": "p/OR1aWwIYPiLYywa4b4/Y1Lk3w=",
      "accessKey": "yQswY8hJw4cn79CgPdmj6JGO3XIewz",
      "expire": "1659420102",
      "host": "https://mppcdev.oss-cn-qingdao.aliyuncs.com",
      "region": "oss-cn-qingdao",
      "dir": "home/hypothesis/app/img/mppc/CIAS/6327/2022/08/01/02/CIAS6327002022080102A6327000003/",
      "policy": "eyJleHBpcmF0aW9uIjoiMjAyMi0wOC0wMlQwNjowMTo0Mi44MTlaIiwiY29uZGl0aW9ucyI6W1siY29udGVudC1sZW5ndGgtcmFuZ2UiLDAsMTA0ODU3NjAwMF0sWyJzdGFydHMtd2l0aCIsIiRrZXkiLCJob21lL2h5cG90aGVzaXMvYXBwL2ltZy9tcHBjL0NJQVMvNjMyNy8yMDIyLzA4LzAxLzAyL0NJQVM2MzI3MDAyMDIyMDgwMTAyQTYzMjcwMDAwMDMvIl1dfQ=="
    },
    "rptno": "2022080107"
  }
  static headers = {
    // 指定该Object被下载时网页的缓存行为。
    // 'Cache-Control': 'no-cache',
    // 指定该Object被下载时的名称。
    // 'Content-Disposition': 'oss_download.txt',
    // 指定该Object被下载时的内容编码格式。
    // 'Content-Encoding': 'UTF-8',
    // 指定过期时间。
    // 'Expires': 'Wed, 08 Jul 2022 16:57:01 GMT',
    // 指定Object的存储类型。
    // 'x-oss-storage-class': 'Standard',
    // 指定Object的访问权限。
    // 'x-oss-object-acl': 'private',
    // 设置Object的标签，可同时设置多个标签。
    // 'x-oss-tagging': 'Tag1=1&Tag2=2',
    // 指定CopyObject操作时是否覆盖同名目标Object。此处设置为true，表示禁止覆盖同名Object。
    // 'x-oss-forbid-overwrite': 'true',
  };

  static register(data) {
    return _axios({
      method: 'post',
      url: 'cms/user/register',
      data,
      handleError: true
    })
  }

  static async uploadToken(file, callback, params = {
    type: 'image'
  }) {
    let fileName = file.name
    let res = await get('', params)
    // 拿到签名信息后，组装表单数据，作参考，具体的字段找后台要
    let obj = res.data.data
    let config = {}
    config.host = obj['host']
    config.policyBase64 = obj['policy']
    config.accessid = obj['accessId']
    config.signature = obj['signature']
    config.expire = parseInt(obj['expire'])
    config.callbackbody = obj['callback']
    config.dir = obj['dir']

    let fd = new FormData()
    let key = config.dir + new Date().getUTCDate()
    fd.append('key', key)
    fd.append('success_action_status', '200')
    fd.append('x-oss-object-acl', 'public-read')
    fd.append('x-oss-meta-fullname', fileName)
    fd.append('OSSAccessKeyId', config.accessid)
    fd.append('policy', config.policyBase64)
    fd.append('signature', config.signature)
    fd.append('success_action_status', '200')
    fd.append('file', file)
    if (config.host.indexOf('http:') > -1) {
      let protocol = window.location.protocol || 'http:'
      let subUrl = config.host.substring(5, config.host.length)
      config.host = protocol + subUrl
    }
    // 数据组装完成后，发送上传请求到阿里云oss
    return this.upload(config.host, fd, callback)
  }
  static upload(url, fd, progressCallback) {
    return _axios({
      url,
      method: 'POST',
      data: fd,
      processData: false,
      cache: false,
      contentType: false,
      // 这里，我们可以做上传经度
      onUploadProgress: progressEvent => {
        if (progressEvent.lengthComputable) {
          let percent = (progressEvent.loaded / progressEvent.total) * 100 || 0
          progressCallback({
            progressEvent,
            percent: percent
          })
        }
      }
    })

  }

  static async bucketUpload(file) {
    console.log('file', file)
    let uploadInfo = this.uploadInfo
    let ossObject = uploadInfo.ossObject
    // 实例化一个上传客户端
    const client = new OSS({
      // yourRegion填写Bucket所在地域。Region填写为oss-cn-hangzhou。
      region: ossObject.region, // oss地址
      // 从STS服务获取的临时访问密钥（AccessKey ID和AccessKey Secret）。
      accessKeyId: ossObject.accessId, // 通过阿里云控制台创建的AccessKey ID。
      accessKeySecret: ossObject.accessKey, // 通过阿里云控制台创建的AccessKey Secret。
      // 从STS服务获取的安全令牌（SecurityToken）。
      // stsToken: obj.SecurityToken,
      // 填写Bucket名称。
      bucket: ossObject.bucket,
      useFetch: true, // 支持上传大于100KB的文件
      secure: true // 返回的url为https
    })

    let path = ossObject.dir + file.name
    // 获取下载exampleobject.txt文件的签名URL，使用浏览器访问时默认直接预览要下载的文件。
    // 填写不包含Bucket名称在内的Object完整路径。
    const url = client.signatureUrl(path);

    // 获取下载exampleobject.txt文件的签名URL，配置文件HTTP头中的Content-Disposition为attachment，实现浏览器访问时自动下载文件，并自定义下载后的文件名称。
    // 如果您希望直接在浏览器中预览文件，配置文件HTTP头中的Content-Disposition为inline并使用Bucket绑定的自定义域名进行访问。
    const tmpcnt = file.name.lastIndexOf(".") // 获取.的下标
    const uploadFileName = file.name.substring(0, tmpcnt) // 获取文件名
    const exname = file.name.substring(tmpcnt + 1) // 获取后缀名
    const filename = '1.' + exname // 自定义下载后的文件名称。
    const response = {
      'content-disposition': `attachment; filename=${encodeURIComponent(filename)}`
    }
    // 填写不包含Bucket名称在内的Object完整路径。
    const url1 = client.signatureUrl(path, {
      response
    });
    // 获取上传exampleobject.txt文件的签名URL，并设置过期时间。
    // 填写不包含Bucket名称在内的Object完整路径。
    const url2 = client.signatureUrl(path, {
      // 设置过期时间，默认值为1800秒。
      expires: 60 * 60 * 24,
      // 设置请求方式为PUT。默认请求方式为GET。
      // method: 'PUT'
    });
    // 获取上传exampleobject.txt文件的签名URL，并设置Content-Type。
    // 填写不包含Bucket名称在内的Object完整路径。
    const url3 = client.signatureUrl(path, {
      expires: 60 * 60 * 24,
      // method: 'PUT',
      'Content-Type': file.type,
    });
    console.log('url', url);
    console.log('url1', url1);
    console.log('url2', url2);
    console.log('url3', url3);
    let data;
    // 创建并填写Blob数据。
    // data = new Blob(['Hello OSS']);
    // 创建并填写OSS Buffer内容。
    //const data = new OSS.Buffer(['Hello OSS']);
    data = file
    try {
      // 填写Object完整路径。Object完整路径中不能包含Bucket名称。
      // 您可以通过自定义文件名（例如exampleobject.txt）或文件完整路径（例如exampledir/exampleobject.txt）的形式实现将数据上传到当前Bucket或Bucket中的指定目录。
      // data对象可以自定义为file对象、Blob数据或者OSS Buffer。
      // const result = await client.put(
      //   path,
      //   data
      //   //{headers}
      // );
      console.log(result);
    } catch (e) {
      console.log(e);
    }


  }
  //
  static getFileFromUrl(url, fileName) {
    return new Promise((resolve, reject) => {
      var blob = null;
      var xhr = new XMLHttpRequest();
      xhr.open("GET", url);
      xhr.setRequestHeader('Accept', 'image/png');
      xhr.responseType = "blob";
      // 加载时处理
      xhr.onload = () => {
        // 获取返回结果
        blob = xhr.response;
        let file = new File([blob], fileName, {
          type: 'image/png'
        });
        console.log('111', url, url.cons);
        console.log('222', blob, blob.in);
        console.log('333', file, typeof (file));
        // 返回结果
        resolve(file);
      };
      xhr.onerror = (e) => {
        reject(e)
      };
      // 发送
      xhr.send();
    });
  }
  static urlToBase64(url) {
    return new Promise((resolve) => {
      let canvas = document.createElement('canvas')
      let ctx = canvas.getContext('2d')
      let img = new Image()
      img.crossOrigin = 'Anonymous';
      img.onload = function () {
        canvas.height = img.height;
        canvas.width = img.width;
        ctx.drawImage(img, 0, 0);
        // 获取Base64
        var dataURL = canvas.toDataURL('image/png');
        // console.log('base64地址：', dataURL)
        resolve(dataURL)
      };
      img.src = url;
    })

  }
  static base64ToFile(dataURL) {
    var arr = dataURL.split(',')
    let mime = arr[0].match(/:(.*?);/)[1]
    let bstr = atob(arr[1]),
      n = bstr.length,
      u8arr = new Uint8Array(n);
    while (n--) {
      u8arr[n] = bstr.charCodeAt(n);
    }
    let filename = new Date().getTime() + "" + Math.ceil(Math.random() * 100) + "." + mime.split("/")[1]
    return (new File([u8arr], filename, {
      type: mime
    }))
  }


}
export default File
